package vwg.na.vwm.rh.motorsdk.modelo.procesos;

import java.io.Serializable;
import java.util.Calendar;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import vwg.na.vwm.rh.modulo.ideas.util.enums.EstadoIdea;
import vwg.na.vwm.rh.motorsdk.commons.entidades.Persona;
import vwg.na.vwm.rh.motorsdk.modelo.procesos.entidadesgrales.IdeAsignacionBO;
import vwg.na.vwm.rh.motorsdk.modelo.procesos.entidadesgrales.IdeParticipante;
import vwg.na.vwm.rh.motorsdk.modelo.procesos.entidadesgrales.IdeSolicitudMovimiento;
import vwg.na.vwm.rh.motorsdk.modelo.procesos.entidadesgrales.IdeTipoIdea;

@Entity
@Table(name = "ideaProceso")
public class IdeaProceso implements Serializable, IEntidadGenerica {

    private static final long serialVersionUID = 1L;

    private Long idIdeaProceso;
    private EstadoIdea estadoidea;
    private IdeSolicitudMovimiento solicitudMovimiento;
    private String folioIdea;
    private Boolean ideaImplementada;
    private Calendar fechaimplementacion;
    private Boolean ideaEconomica;
    private Float potencialAhorro;
    private String nombre;
    private String situacionActualAnterior;
    private String propuesta;
    private String resultadoBeneficio;
    private IdeTipoIdea tipoIdea;
    
    private String comentariosSeguimiento;
    private String resumenIdea;
    private boolean asignadoAProceso;
    private boolean asignadoAProducto;
    private boolean asignadoAAdministrativo;
    private String medida;    
    private Persona jefeInmediato;
    private Persona jefeGrado30Superior;
    private IdeAsignacionBO asignacionBO;
    
    private Long folio;
    private String estado;
    private Integer actividadInicial;
    private Calendar fechaActividadActual;
    private Integer actividadActual;
    private String comentario;
    private Integer personaAplica;
    private String tipoMovimiento;
    private Calendar fechaCreacion;
    private Integer personaCreador;
    private String titulo;
    private Long registroId;

    private Set<IdeParticipante> ideParticipantesSet;

    public IdeaProceso() {
	ideParticipantesSet = new HashSet<IdeParticipante>();
    }

    @Id
    @Column
    public Long getIdIdeaProceso() {
	return idIdeaProceso;
    }

    public void setIdIdeaProceso(Long idIdeaProceso) {
	this.idIdeaProceso = idIdeaProceso;
    }

    @Enumerated(EnumType.STRING)
    @Column
    public EstadoIdea getEstadoidea() {
	return estadoidea;
    }

    public void setEstadoidea(EstadoIdea estadoidea) {
	this.estadoidea = estadoidea;
    }

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "solicitudMovimiento")
    public IdeSolicitudMovimiento getSolicitudMovimiento() {
        return solicitudMovimiento;
    }

    public void setSolicitudMovimiento(IdeSolicitudMovimiento solicitudMovimiento) {
        this.solicitudMovimiento = solicitudMovimiento;
    }

    @Column
    public String getFolioIdea() {
	return folioIdea;
    }

    public void setFolioIdea(String folioidea) {
	this.folioIdea = folioidea;
    }

    @Temporal(TemporalType.DATE)
    @Column
    public Calendar getFechaimplementacion() {
	return fechaimplementacion;
    }

    public void setFechaimplementacion(Calendar fechaimplementacion) {
	this.fechaimplementacion = fechaimplementacion;
    }

    @Basic
    @Column
    public boolean isIdeaImplementada() {
	return ideaImplementada;
    }

    public void setIdeaImplementada(boolean ideaimplementada) {
	this.ideaImplementada = ideaimplementada;
    }

    @Basic
    @Column
    public boolean isIdeaEconomica() {
	return ideaEconomica;
    }

    public void setIdeaEconomica(boolean ideaeconomica) {
	this.ideaEconomica = ideaeconomica;
    }

    @Column
    public Float getPotencialAhorro() {
	return potencialAhorro;
    }

    public void setPotencialAhorro(Float potencialahorro) {
	this.potencialAhorro = potencialahorro;
    }

    @Column
    public String getNombre() {
	return nombre;
    }

    public void setNombre(String nombre) {
	this.nombre = nombre;
    }

    @Column
    public String getSituacionActualAnterior() {
        return situacionActualAnterior;
    }

    public void setSituacionActualAnterior(String situacionActualAnterior) {
        this.situacionActualAnterior = situacionActualAnterior;
    }

    @Column
    public String getPropuesta() {
	return propuesta;
    }



    public void setPropuesta(String propuesta) {
	this.propuesta = propuesta;
    }

    @Column
    public String getResultadoBeneficio() {
	return resultadoBeneficio;
    }

    public void setResultadoBeneficio(String resultadobeneficio) {
	this.resultadoBeneficio = resultadobeneficio;
    }
    
    @OneToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "tipoIdea")
    public IdeTipoIdea getTipoIdea() {
	return tipoIdea;
    }

    public void setTipoIdea(IdeTipoIdea tipoIdea) {
	this.tipoIdea = tipoIdea;
    }

    @Override
    @Column
    public Long getFolio() {
	return folio;
    }

    public void setFolio(Long folio) {
	this.folio = folio;
    }

    @Override
    @Column
    public String getEstado() {
	return estado;
    }

    public void setEstado(String estado) {
	this.estado = estado;
    }

    @Override
    @Column
    public Integer getActividadInicial() {
	return actividadInicial;
    }

    public void setActividadInicial(Integer actividadinicial) {
	this.actividadInicial = actividadinicial;
    }

    @Override
    @Temporal(TemporalType.DATE)
    @Column
    public Calendar getFechaActividadActual() {
	return fechaActividadActual;
    }

    public void setFechaActividadActual(Calendar fechaactividadactual) {
	this.fechaActividadActual = fechaactividadactual;
    }

    @Override
    @Column
    public Integer getActividadActual() {
	return actividadActual;
    }

    public void setActividadActual(Integer actividadactual) {
	this.actividadActual = actividadactual;
    }

    @Override
    @Column
    public String getComentario() {
	return comentario;
    }

    public void setComentario(String comentario) {
	this.comentario = comentario;
    }

    @Column
    @Override
    public Integer getPersonaAplica() {
	return personaAplica;
    }

    public void setPersonaAplica(Integer personaaplica) {
	this.personaAplica = personaaplica;
    }

    @Column
    @Override
    public String getTipoMovimiento() {
	return tipoMovimiento;
    }

    public void setTipoMovimiento(String tipomovimiento) {
	this.tipoMovimiento = tipomovimiento;
    }

    @Override
    @Temporal(TemporalType.DATE)
    @Column
    public Calendar getFechaCreacion() {
	return fechaCreacion;
    }

    public void setFechaCreacion(Calendar fechacreacion) {
	this.fechaCreacion = fechacreacion;
    }

    @Override
    @Column
    public Integer getPersonaCreador() {
	return personaCreador;
    }

    public void setPersonaCreador(Integer personacreador) {
	this.personaCreador = personacreador;
    }

    @Override
    @Column
    public String getTitulo() {
	return titulo;
    }

    public void setTitulo(String titulo) {
	this.titulo = titulo;
    }

    @Override
    @Column
    public Long getRegistroId() {
	return registroId;
    }

    public void setRegistroId(Long registroid) {
	this.registroId = registroid;
    }

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "ideaProceso")    
    public Set<IdeParticipante> getIdeParticipantesSet() {
	return ideParticipantesSet;
    }

    public void setIdeParticipantesSet(Set<IdeParticipante> ideParticipantesSet) {
	this.ideParticipantesSet = ideParticipantesSet;
    }

    @Column
    public String getComentariosSeguimiento() {
        return comentariosSeguimiento;
    }

    public void setComentariosSeguimiento(String comentariosSeguimiento) {
        this.comentariosSeguimiento = comentariosSeguimiento;
    }

    @Column
    public String getResumenIdea() {
        return resumenIdea;
    }

    public void setResumenIdea(String resumenIdea) {
        this.resumenIdea = resumenIdea;
    }

    @Column
    public boolean isAsignadoAProceso() {
        return asignadoAProceso;
    }

    public void setAsignadoAProceso(boolean asignadoAProceso) {
        this.asignadoAProceso = asignadoAProceso;
    }

    @Column
    public boolean isAsignadoAProducto() {
        return asignadoAProducto;
    }
    
    public void setAsignadoAProducto(boolean asignadoAProducto) {
        this.asignadoAProducto = asignadoAProducto;
    }

    @Column
    public boolean isAsignadoAAdministrativo() {
        return asignadoAAdministrativo;
    }

    public void setAsignadoAAdministrativo(boolean asignadoAAdministrativo) {
        this.asignadoAAdministrativo = asignadoAAdministrativo;
    }

    @Column
    public String getMedida() {
        return medida;
    }

    public void setMedida(String medida) {
        this.medida = medida;
    }

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "jefeInmediato")
    public Persona getJefeInmediato() {
        return jefeInmediato;
    }

    public void setJefeInmediato(Persona jefeInmediato) {
        this.jefeInmediato = jefeInmediato;
    }

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "jefeGrado30Superior")    
    public Persona getJefeGrado30Superior() {
        return jefeGrado30Superior;
    }

    public void setJefeGrado30Superior(Persona jefeGrado30Superior) {
        this.jefeGrado30Superior = jefeGrado30Superior;
    }

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "asignacionBO")
    public IdeAsignacionBO getAsignacionBO() {
        return asignacionBO;
    }

    public void setAsignacionBO(IdeAsignacionBO asignacionBO) {
        this.asignacionBO = asignacionBO;
    }
 
}
